//package com.jxj.study.util.ImageTests;
//
//import javax.swing.*;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import javax.imageio.ImageIO;
//
//public class ImageZoomLabel extends JFrame {
//    private final JLabel imageLabel;
//    private BufferedImage originalImage;
//    private Image scaledImage;
//    private double scale = 1.0;
//    private static final double ZOOM_FACTOR = 0.1;
//    private static final double MIN_SCALE = 0.1;
//    private static final double MAX_SCALE = 5.0;
//
//    public ImageZoomLabel() {
//        setTitle("图片缩放示例");
//        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//        setSize(800, 600);
//        setLocationRelativeTo(null);
//
//        // 加载图片
//        try {
//            originalImage = ImageIO.read(new File("C:\\Users\\admin\\Desktop\\图片\\2G(6X@H6U]$_5E32}[6`O}R.png")); // 替换为你的图片路径
//            scaledImage = originalImage;
//        } catch (Exception e) {
//            e.printStackTrace();
//            JOptionPane.showMessageDialog(this, "无法加载图片", "错误", JOptionPane.ERROR_MESSAGE);
//            System.exit(1);
//        }
//
//        // 创建显示图片的JLabel
//        imageLabel = new JLabel(new ImageIcon(scaledImage));
//        imageLabel.setHorizontalAlignment(JLabel.CENTER);
//        imageLabel.setVerticalAlignment(JLabel.CENTER);
//
//        // 添加鼠标滚轮监听器
//        imageLabel.addMouseWheelListener(e -> {
//            // 获取鼠标位置（相对于imageLabel）
//            Point mousePos = e.getPoint();
//
//            // 计算缩放前的图片位置和尺寸
//            Rectangle oldBounds = getImageBounds();
//
//            // 调整缩放比例
//            int rotation = e.getWheelRotation();
//            if (rotation < 0) { // 向上滚动 - 放大
//                scale = Math.min(scale + ZOOM_FACTOR, MAX_SCALE);
//            } else { // 向下滚动 - 缩小
//                scale = Math.max(scale - ZOOM_FACTOR, MIN_SCALE);
//            }
//
//            // 缩放图片
//            scaleImage();
//
//            // 计算缩放后的图片位置和尺寸
//            Rectangle newBounds = getImageBounds();
//
//            // 计算鼠标在图片上的相对位置比例
//            double xRatio = (mousePos.x - oldBounds.x) / (double) oldBounds.width;
//            double yRatio = (mousePos.y - oldBounds.y) / (double) oldBounds.height;
//
//            // 调整滚动条位置以保持鼠标下的点不变
//            adjustScrollPosition(xRatio, yRatio, oldBounds, newBounds);
//        });
//
//        // 将JLabel放入JScrollPane以实现滚动
//        JScrollPane scrollPane = new JScrollPane(imageLabel);
//        getContentPane().add(scrollPane, BorderLayout.CENTER);
//
//        // 状态栏显示缩放比例
//        JLabel statusLabel = new JLabel("缩放比例: 100%");
//        statusLabel.setBorder(BorderFactory.createEtchedBorder());
//        getContentPane().add(statusLabel, BorderLayout.SOUTH);
//
//        // 更新状态栏的缩放比例
//        updateStatusLabel(statusLabel);
//    }
//
//    private void scaleImage() {
//        int newWidth = (int) (originalImage.getWidth() * scale);
//        int newHeight = (int) (originalImage.getHeight() * scale);
//        scaledImage = originalImage.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
//        imageLabel.setIcon(new ImageIcon(scaledImage));
//    }
//
//    private Rectangle getImageBounds() {
//        // 获取图片在JLabel中的实际显示位置和尺寸
//        Rectangle bounds = new Rectangle();
//        Icon icon = imageLabel.getIcon();
//        if (icon != null) {
//            bounds.width = icon.getIconWidth();
//            bounds.height = icon.getIconHeight();
//
//            // 计算居中位置
//            Dimension size = imageLabel.getSize();
//            bounds.x = (size.width - bounds.width) / 2;
//            bounds.y = (size.height - bounds.height) / 2;
//        }
//        return bounds;
//    }
//
//    private void adjustScrollPosition(double xRatio, double yRatio, Rectangle oldBounds, Rectangle newBounds) {
//        // 获取JScrollPane
//        JScrollPane scrollPane = (JScrollPane) imageLabel.getParent().getParent();
//
//        // 计算新的视口位置
//        int newX = (int) (newBounds.x + xRatio * newBounds.width);
//        int newY = (int) (newBounds.y + yRatio * newBounds.height);
//
//        // 调整视口位置
//        Rectangle viewRect = scrollPane.getViewport().getViewRect();
//        int centerX = newX - viewRect.width / 2;
//        int centerY = newY - viewRect.height / 2;
//
//        // 确保不超出范围
//        centerX = Math.max(0, Math.min(centerX, newBounds.width - viewRect.width));
//        centerY = Math.max(0, Math.min(centerY, newBounds.height - viewRect.height));
//
//        // 设置新的视口位置
//        imageLabel.scrollRectToVisible(new Rectangle(centerX, centerY, viewRect.width, viewRect.height));
//    }
//
//    private void updateStatusLabel(JLabel statusLabel) {
//        statusLabel.setText(String.format("缩放比例: %.0f%%", scale * 100));
//    }
//
//    public static void main(String[] args) {
//        SwingUtilities.invokeLater(() -> {
//            ImageZoomLabel frame = new ImageZoomLabel();
//            frame.setVisible(true);
//        });
//    }
//}